2025년 2분기 2급 관리자를 모집 중입니다.

New seed/개발노트

최근 수정 시각:
권한 부족
편집 권한이 부족합니다. 로그인된 사용자 OR geoip:KR(이)여야 합니다. 해당 문서의 ACL 탭을 확인하시기 바랍니다.
알림
현재 진행 중인 사용자 토론이 있습니다.
파일:상위 문서 아이콘.svg 상위 문서: New seed

1. 개요2. 문제점
2.1. 파서
2.1.1. 고질적 이슈 - 규식이2.1.2. 고질적 이슈2 - 지랄맞은 파서 반환값
3. 왜 개발이 늦어질까4. 개발일지
4.1. 문법 신창섭화
4.1.1. 동영상 매크로
4.2. 나무야 살려줘

1. 개요[편집]

분명 New seed 개발하기 시작했는데 아무도 관심이 없고 아무도 모르고 아무도 안 쓰고 심지어 공식 문서조차 없어서 그냥 귀찮아 개발노트랑 업데이트 일지나 대충 끄적이려고 만든 문서 중 하나

2. 문제점[편집]


New seed === GTX-A
20초 요약

2.1. 파서[편집]

2.1.1. 고질적 이슈 - 규식이[편집]

const rHeadings = /^(=\s(((?!\s=).)*)\s=|==\s(((?!\s==).)*)\s==|===\s(((?!\s===).)*)\s===|====\s(((?!\s====).)*)\s====|=====\s(((?!\s=====).)*)\s=====|======\s(((?!\s======).)*)\s======|=[#]\s(((?!\s[#]=).)*)\s[#]=|==[#]\s(((?!\s[#]==).)*)\s[#]==|===[#]\s(((?!\s[#]===).)*)\s[#]===|====[#]\s(((?!\s[#]====).)*)\s[#]====|=====[#]\s(((?!\s[#]=====).)*)\s[#]=====|======[#]\s(((?!\s[#]======).)*)\s[#]======)$/gm;
const rHeading = [, ];
for(var i=1; i<=6; i++) {
rHeading.push(RegExp(`^${multiply('=', i)}([#]|)\\s(((?!${multiply('=', i)}).)*)\\s([#]|)${multiply('=', i)}$`, 'm'));
}


엄청난 파서. 저거 해독하는데에 하루가 넘게 걸림

심지어 원본은 더 처참하다.
const rHeadings = 
ver('4.7.2')
? /^(=\s(((?!\s=).)*)\s=|==\s(((?!\s==).)*)\s==|===\s(((?!\s===).)*)\s===|====\s(((?!\s====).)*)\s====|=====\s(((?!\s=====).)*)\s=====|======\s(((?!\s======).)*)\s======|=[#]\s(((?!\s[#]=).)*)\s[#]=|==[#]\s(((?!\s[#]==).)*)\s[#]==|===[#]\s(((?!\s[#]===).)*)\s[#]===|====[#]\s(((?!\s[#]====).)*)\s[#]====|=====[#]\s(((?!\s[#]=====).)*)\s[#]=====|======[#]\s(((?!\s[#]======).)*)\s[#]======)$/gm
: /^(=\s(((?!\s=).)*)\s=|==\s(((?!\s==).)*)\s==|===\s(((?!\s===).)*)\s===|====\s(((?!\s====).)*)\s====|=====\s(((?!\s=====).)*)\s=====|======\s(((?!\s======).)*)\s======)$/gm ;
const rHeading = [, ];
for(var i=1; i<=6; i++) {
rHeading.push(RegExp(`^${multiply('=', i)}([#]|)\\s(((?!${multiply('=', i)}).)*)\\s([#]|)${multiply('=', i)}$`, 'm'));
}


그래서 이 문제를 해결하지 않는 이상 파서가 qt인 점은 해결하지 못할 것 같다.

2.1.2. 고질적 이슈2 - 지랄맞은 파서 반환값[편집]

뭐 이건 다들 알 것이다. 당장 구 하늘위키 도움말만 봐도 와장창 깨져있는데 뭐 더 할 말이 있나?

문법 지원에 대해서는 말을 아끼겠습니다. 구 하늘위키를 조금이라도 해 본 유저들이라면 충분히 뭐가 문제인지는 알 것이다.

3. 왜 개발이 늦어질까[편집]

뭐 아까 위 문단에서 20초 요약이라고 넣은 씹덕과 철덕의 콜라보레이션 노래와 같은 상황이다
한계까지 발버둥친 공사는
일단 가능한 한 모든 것을 갈아넣어 개조라는 이름의 정상화 시작
상상 이상으로 난공사였고
이 칸에 서술하기엔 공간이 너무 적어 각주로 설명.[1][2][3][4][5][6]
애매한 위치에서 단절된
일단 큰 이슈들은 해결했지만 그럼에도 불구
지티엑스에이 부분 개통
아직 완전 개통[7]하지 못하는 퀄리티
일단 개통하고 보니 현실은
그래도 굴러가기는 하니 사용해보면
남은 까마득한 공사 일정
아직 한참 남은 수정할 부분들[8]
황금노선이라는 말 하나로
황금 아니고 구리긴 한데 우리만의 엔진이 될 수 있다는 생각을 가짐
일단 개통 후 쪼개서 운행해
근데 일단 써보십쇼 정상 작동은 안 합니다 ㅇㅇ

4. 개발일지[편집]

4.1. 문법 신창섭화[편집]

4.1.1. 동영상 매크로[편집]

	// 동화상
for(let finc of (data.match(/\[(youtube|kakaotv|nicovideo|vimeo|navertv)[(](((?![)])(.|<spannw>[)]<\/spannw>))+)[)]\]/gi) <removeEscape/>\|| [])) {
let inc = finc.match(/\[(youtube|kakaotv|nicovideo|vimeo|navertv)[(](((?!([)]))(.|<spannw>[)]<\/spannw>))+)[)]\]/i);
let vid = inc[1].replace(/<spannw>[)]<\/spannw>/, ')');
let id = inc[2].replace(/<spannw>[)]<\/spannw>/, ')').split(',')[0].replace(/^(\s+)/, '').replace(/(\s+)$/, '').replace(/[&]quot;/g, '"').replace(/[&]amp;/g, '&').replace(/[&]lt;/g, '<').replace(/[&]gt;/g, '>');
let paramsa = inc[2].replace(/<spannw>[)]<\/spannw>/, ')').split(',').slice(1, 99999);
let params = {};
for(let item of paramsa) {
let pp = item.split('=')[0].replace(/^(\s+)/, '').replace(/(\s+)$/, '').toLowerCase();
params[pp] = item.replace(pp + '=', '').replace(/^(\s+)/, '').replace(/(\s+)$/, '');
}
let d;
switch(vid.toLowerCase()) {
case 'youtube': {
d = `<iframe allowfullscreen src="//www.youtube.com/embed/${encodeURIComponent(id)}${params.start ? `?start=${encodeURIComponent(params.start)}` : ''}${params.end ? ((params.start ? '&' : '?') + 'end=' + encodeURIComponent(params.end)) : ''}" loading=lazy width="${params.width <removeEscape/>\|| 640}" height="${params.height <removeEscape/>\|| 360}" frameborder=0></iframe>`;
}
break; case 'kakaotv': {
d = `<iframe allowfullscreen src="//tv.kakao.com/embed/player/cliplink/${encodeURIComponent(id)}" loading=lazy width="${params.width <removeEscape/>\|| 640}" height="${params.height <removeEscape/>\|| 360}" frameborder=0></iframe>`;
}
break; case 'nicovideo': {
d = `<iframe allowfullscreen src="//embed.nicovideo.jp/watch/sm${encodeURIComponent(id)}" loading=lazy width="${params.width <removeEscape/>\|| 720}" height="${params.height <removeEscape/>\|| 480}" frameborder=0></iframe>`;
}
break; case 'vimeo': {
d = `<iframe allowfullscreen src="//player.vimeo.com/video/${encodeURIComponent(id)}" loading=lazy width="${params.width <removeEscape/>\|| 640}" height="${params.height <removeEscape/>\|| 360}" frameborder=0></iframe>`;
}
break; case 'navertv': {
d = `<iframe allowfullscreen src="//tv.naver.com/embed/${encodeURIComponent(id)}" loading=lazy width="${params.width <removeEscape/>\|| 640}" height="${params.height <removeEscape/>\|| 360}" frameborder=0></iframe>`;
}
}

data = data.replace(finc, d);
}


여기서 nicovideo.jp를 정상화해야한다

아주 간단하게 sm(id 8자리)와 (id 8자리) 둘 다 작동하게 수정해보자

		break; case 'nicovideo': {
id = id.startsWith('sm') ? id : `sm${id}`;
d = `<iframe allowfullscreen src="//embed.nicovideo.jp/watch/${encodeURIComponent(id)}" loading=lazy width="${params.width <removeEscape/>\|| 720}" height="${params.height <removeEscape/>\|| 480}" frameborder=0></iframe>`;
}


이렇게 정상화하면 잘 작동할 것이다

4.2. 나무야 살려줘[편집]

{{{#!if namu != undefined
살려주세요}}}


저거 구현하기 vs 엔진 개발 접기 라면 잠시 후자를 고르겠어

최종 결과

else if(data.substr(pos + 3, 4) == '#!if' && !discussion) {
^^^
TypeError: data is not defined.
at Eval(D:\169.9\routes\router.js:27:7)
[1] 파일:이딴게위1키.png[2] 우선, 틀 문법은 이미 모든 부분이 정규식과 알 수 없는 변수명들로 인해 읽기 힘든 지경에 있을 뿐더러, col 계열 문법의 핵심인 '한 줄에 적용'은 일반 html, css에선 적용하기 매우 힘든, 아니 그냥 불가능한 사항에 가깝다. 기껏 해봐야 간단한 문법들로 1차원적인 코드를 짜는 지경인데 복잡한 렌더러를 잘 구성할 수 있을까? 당연히 안 될 것이다. syntax, ruby, dday 등 구현되지 않은 문법들을 구현하는 것 또한 어렵다. 물론 단순히 정규식을 통해 변경된 값을 반환하는 것은 매우 쉽지만, 구현되지 않은 문법만 수십가지가 되기에 당연히 어려울 것이다.[3] 탈퇴와 닉네임 변경은 UUID가 없는 현 병아리 특성상 일괄적으로 DB를 수정하게 되며 깨지는 현상이 있고, 심지어는 탈퇴를 하면 한 사용자로 인식된다는 큰 문제도 있다. 이로 인해 당연히 해당 기능을 다시 개발해야 한다.[4]
테마에 따라 표시되는 파일이 다르게, 다른 테마의 파일은 표시되지 않게 하는 것 또한 매개변수를 추가해야 하고, 이를 구현하는 것에 큰 시간이 소요될 것이다. 안 그래도 svg 업로드 안 되는 문제조차 개판난 변수명과 뒤죽박죽 정규식으로 수정하지 못하는 상황인데 이를 잘 수정할 수 있을까? 없을 것이다.
[5] 그리고 the seed 하위 호환 문제도 있다. Node 메모리 할당이 1.4GB인데, 이를 초과하여 강제 종료되는 경우도 있다. 4.0.0부터 시작해 4.27.0까지 모든 버전을 커버해야 하기 때문에 자연스럽게 최적화는 개판이 되기 때문이다. 최적화를 위해 모든 체제를 손보려고 하면 사실상 모든 파일에 ver, verrev 함수가 포함되어 하위 호환을 책임지기에 이는 매우 어려운 상황이다.[6] 이 외에도 문제는 아주 많다. 단순 편의성 개선이 1~3개라 가정하면 파서 수정은 10~30개, 기능 개선은 5~15개일 것이다. 아무리 단순한 토목 공사여도 24시간 노가다 뛰면 사람은 뒤진다. 안 그래도 적은 시간 쪼개고 쪼개서 개발하는 상황에서 이를 전부 다 해결하기에는 불가능할 것이고, 오랜 시간이 걸릴 것이다. 애초에 이미 기반 자체가 망가져있어 이 망가진 기반을 완전히 갈아엎어야 하는 상황이므로 자연스럽게 이 공사는 난공사일 수밖에 없다.[7] 정식 릴리즈 배포[8] 파일:이딴게위1키.png 더 이상 자세한 설명은 생략한다. 어쨌든 까마득한 공사 일정이죠?

라이선스를 별도로 명시하지 않은 문서는 CC BY-SA 4.0에 따라 이용할 수 있습니다.
자세한 내용은 다올위키 라이선스 정책을 확인하시기 바랍니다.

기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다.

오픈 소스가 아닌 다올위키의 고유한 디자인을 무단으로 도용하는 것과, 운영 문서를 포함한 모든 문서를 라이선스를 지키지 않고 무단으로 가져가는 행동은 저작권 위반이며 법적 책임을 물 수 있습니다.